package com.hsnn.medstgmini.trading.pur.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.hsnn.medstgmini.trading.pur.dao.PurReturnOrderDao;
import com.hsnn.medstgmini.trading.pur.model.PurAoginfo;
import com.hsnn.medstgmini.trading.pur.model.PurReturnPlan;
import com.hsnn.medstgmini.trading.pur.model.ReturnStatus;
import com.hsnn.medstgmini.trading.pur.model.form.ReturnDrugForm;
import com.hsnn.medstgmini.trading.pur.service.PurReturnOrderManager;
import com.hsnn.medstgmini.util.ConstantsUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseDate;
import com.hsnn.medstgmini.util.ParseNumber;

@Service
public class PurReturnOrderManagerImpl implements PurReturnOrderManager {
	
	@Autowired
	private PurReturnOrderDao purReturnOrderDao;
	
	@Resource(name = "sessionFactory")
	private SessionFactory factory;
	
	@SuppressWarnings("unchecked")
	@Override
	public Pagination getReturnOrderList(Pagination page) {
		 page = purReturnOrderDao.getReturnOrderList(page);
		 List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		 if (null != list && list.size() > 0){
			 for (int i = 0; i < list.size(); i++){
				 Map<String, Object> map = list.get(i);
				 map.put("status", map.get("status")==null?"":ReturnStatus.getName(Integer.valueOf(map.get("status").toString())));
			 }
			 page.setRows(list);
		 }
		 return page; 
	}
	
	@Override
	public Pagination getProCompReturnOrderList(Pagination page) {
		return purReturnOrderDao.getProCompReturnOrderList(page);
	}
	/**
	  * 
	  *@category 获取可退货药品数据（医疗机构）
	  *@author 韩守松
	  *@date 2015年12月1日 
	  *@param page
	  *@return
	  */
	 @SuppressWarnings("unchecked")
	public Pagination getReturnDrugApplyDataList(Pagination page){
		 page = purReturnOrderDao.getReturnDrugApplyDataList(page);
		 List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		 if (null != list && list.size() > 0){
			 for (int i = 0; i < list.size(); i++){
				 Map<String, Object> map = list.get(i);
				 map.put("proPrice", map.get("proPrice")==null?"":ParseNumber.toStrDecimal(ParseNumber.toDouble(map.get("proPrice").toString())));
			 }
		 }
		 page.setRows(list);
		 return page;
	 }
	 /**
	  * 
	  *@category 获取可制定退货单计划列表数据（医疗机构）
	  *@author 韩守松
	  *@date 2015年12月1日 
	  *@param page
	  *@return
	  */
	 @SuppressWarnings("unchecked")
	public Pagination getReturnDrugPlanDataList(Pagination page){
		 page = purReturnOrderDao.getReturnDrugPlanDataList(page);
		 List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		 if (null != list && list.size() > 0){
			 for (int i = 0; i < list.size(); i++){
				 Map<String, Object> map = list.get(i);
				 map.put("joinRetTime", map.get("joinRetTime")==null?"":ParseDate.parseFullFormat(ParseDate.fromFullFormat(map.get("joinRetTime").toString())));
				 map.put("proPrice", map.get("proPrice")==null?"":ParseNumber.toStrDecimal(ParseNumber.toDouble(map.get("proPrice").toString())));
				 map.put("retMoney", map.get("retMoney")==null?"":ParseNumber.toStrDecimal(ParseNumber.toDouble(map.get("retMoney").toString())));
			 }
		 }
		 page.setRows(list);
		 return page;
	 }
	 /**
	  * 
	  *@category 根据到货信息ID查询到货信息
	  *@author 邱磊
	  *@date 2015年7月16日 上午9:53:01
	  *@param id
	  *@return
	  */
	 public PurAoginfo getAoginfoById(String id){
		 return purReturnOrderDao.getAoginfoById(id);
	 }
	 /**
	  * 
	  *@category 加入退货计划（医疗机构）
	  *@author 邱磊
	  *@date 2015年7月16日 上午10:00:58
	  *@param list
	  */
	 @Transactional
	 public void joinReturnPlan(List<ReturnDrugForm> list){
		 Session session = factory.getCurrentSession();
		 Transaction tran = session.getTransaction();
		 try {
			 tran.begin();
			 purReturnOrderDao.joinReturnPlan(list);
			 tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}
		
	 }
	 /**
	  * 
	  *@category 删除退货计划里的药品（医疗机构）
	  *@author 邱磊
	  *@date 2015年7月16日 上午10:44:29
	  *@param list
	  */
	 @Transactional
	 public void deleteReturnPlan(List<ReturnDrugForm> list){
		 Session session = factory.getCurrentSession();
		 Transaction tran = session.getTransaction();
		 try {
			 tran.begin();
			 purReturnOrderDao.deleteReturnPlan(list);
			 tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}
	 }
	 /**
	  * 
	  *@category 根据退货计划ID查询退货计划货信息
	  *@author 邱磊
	  *@date 2015年7月16日 上午9:53:01
	  *@param id
	  *@return
	  */
	 public PurReturnPlan getReturnPlanById(String id){
		 return purReturnOrderDao.getReturnPlanById(id);
	 }
	 /**
	  * 
	  *@category 保存退货计划（医疗机构）
	  *@author 邱磊
	  *@date 2015年7月16日 上午11:02:17
	  *@param list
	  */
	 @Transactional
	 public void modifyReturnPlan(List<ReturnDrugForm> list){
		 Session session = factory.getCurrentSession();
		 Transaction tran = session.getTransaction();
		 try {
			 tran.begin();
			 purReturnOrderDao.modifyReturnPlan(list);
			 tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}
	 }
	 /**
	  * 
	  *@category 生成退货单（医疗机构）
	  *@author 韩守松
	  *@date 2015年12月1日 
	  *@param list
	  */
	 @Transactional
	 public void createReturnInfo(ReturnDrugForm form){
		 Session session = factory.getCurrentSession();
		 Transaction tran = session.getTransaction();
		 try {
			 tran.begin();
			 purReturnOrderDao.createReturnInfo(form);
			 tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		}
	 }
	 /**
	  * 
	  *@category 获取退货单
	  *@author 邱磊
	  *@date 2015年7月16日 下午2:59:30
	  *@param page
	  *@return
	  */
	@SuppressWarnings("unchecked")
	public Pagination getHospReturnInfoDataList(Pagination page){
		page = purReturnOrderDao.getHospReturnInfoDataList(page);
		List<Map<String,Object>> list = (List<Map<String, Object>>) page.getRows();
		Map<String,Object> map = new HashMap<String, Object>();
		if(list.size()>0){
			for(int i = 0;i<list.size();i++){
				map = list.get(i);
				map.put("returnStatus", map.get("returnStatus")==null?"":ReturnStatus.getName(Integer.valueOf(map.get("returnStatus").toString())));
			}
		}
		 return page;
	 }
	 /**
	  * 
	  *@category 跳向退货单详细列表页面（医疗机构）
	  *@author 邱磊
	  *@date 2015年7月16日 下午3:34:14
	  *@param page
	  *@return
	  */
	 @SuppressWarnings("unchecked")
	public Pagination getHospReturnInfoDetailDataList(Pagination page){
		 page = purReturnOrderDao.getHospReturnInfoDetailDataList(page);
		 List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		 if (null != list && list.size() > 0){
			 for (int i = 0; i < list.size(); i++){
				 Map<String, Object> map = list.get(i);
				 if (null == map.get("drugCode")){
					 map.put("drugCode", "");
				 }
				 if (null == map.get("compName")){
					 map.put("compName", "");
				 }
				 map.put("status", map.get("status")==null?"":ConstantsUtil.returnStatus(map.get("status").toString()));
				 map.put("proPrice", map.get("proPrice")==null?"":ParseNumber.toStrDecimal(ParseNumber.toDouble(map.get("proPrice").toString())));
			 }
			 page.setRows(list);
		 }
		 return page; 
	 }
}
